home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / utils / install / diskutil.h < prev    next >
C/C++ Source or Header  |  1993-11-21  |  2KB  |  123 lines

  1. int mmkdir(char *dir)
  2. {
  3.   char *cp, *cp2, c;
  4.   int rv;
  5.   struct ffblk f;
  6.   struct stat s;
  7.  
  8.   if (dir[1] == ':' && dir[2] == 0)
  9.     return 0;
  10.  
  11.   if (stat(dir, &s))
  12.   {
  13.     if (access(dir, 0) == 0)
  14.       return 0;
  15.   }
  16.   else
  17.   {
  18.     if ((s.st_mode & S_IFMT) == S_IFDIR)
  19.       return 0;
  20.     return 1;
  21.   }
  22.  
  23.   rv = mkdir(dir);
  24.   
  25.   if (rv == 0)
  26.     return 0;
  27.  
  28.   if (errno == EACCES)
  29.     return 1;
  30.  
  31.   cp = 0;
  32.   for (cp2=dir; *cp2; cp2++)
  33.     if (*cp2=='\\' || *cp2=='/')
  34.       cp = cp2;
  35.   if (cp == 0)
  36.     return 1;
  37.   c = *cp;
  38.   *cp = 0;
  39.   rv = mmkdir(dir);
  40.   *cp = c;
  41.   
  42.   if (rv)
  43.     return 1;
  44.   return mkdir(dir);
  45. }
  46.  
  47. char *kb(long b)
  48. {
  49.   static char buf[20];
  50.   char *suf = "K";
  51.   if (b < 1000)
  52.   {
  53.     sprintf(buf, "%5ld", b);
  54.     return buf;
  55.   }
  56.   if (b > 1000000L)
  57.   {
  58.     b /= 1000;
  59.     suf = "M";
  60.   }
  61.   if (b < 10000L)
  62.     sprintf(buf, "%ld.%02ld%s", b/1000, b%1000/10, suf);
  63.   else if (b < 100000L)
  64.     sprintf(buf, "%ld.%01ld%s", b/1000, b%1000/100, suf);
  65.   else
  66.     sprintf(buf, "%4ld%s", b/1000, suf);
  67.   return buf;
  68. }
  69.  
  70. long show_free_space()
  71. {
  72.   int drive = 0;
  73.   struct dfree dtable;
  74.   char dletter;
  75.   long fr;
  76.  
  77.   if (install_dir[1] == ':')
  78.   {
  79.     drive = install_dir[0] & 0x1f;
  80.     dletter = drive + '@';
  81.   }
  82.   else
  83.     dletter = getdisk() + 'A';
  84.   getdfree(drive, &dtable);
  85.   fr = (long)dtable.df_avail * dtable.df_bsec * dtable.df_sclus;
  86.   printf("Disk %s%c:%s has %s%s%s available.\n",
  87.          ansibold, dletter, ansinorm, ansibold, kb(fr), ansinorm);
  88.   return fr;
  89. }
  90.  
  91. long copyfile(char *src, char *dest)
  92. {
  93.   int destf, srcf, rd;
  94.   long copied = 0;
  95.   char buf[4096];
  96.  
  97.   srcf = _open(src, O_RDONLY);
  98.   if (srcf < 0)
  99.   {
  100.     printf("Cannot open %s for reading\n", src);
  101.     exit(1);
  102.   }
  103.   destf = _creat(dest, 0);
  104.  
  105.   if (destf < 0)
  106.   {
  107.     printf("Cannot open %s for writing\n", dest);
  108.     perror("The error was");
  109.     exit(1);
  110.   }
  111.   
  112.   while ((rd = read(srcf, buf, 4096)) > 0)
  113.   {
  114.     write(destf, buf, rd);
  115.     copied += rd;
  116.   }
  117.  
  118.   close(srcf);
  119.   close(destf);
  120.   
  121.   return copied;
  122. }
  123.